package com.itheima.day16.reflect.test6;

import java.lang.reflect.Method;

//        Class类获取成员方法对象的方法
public class Test {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
//        Method[] getMethods()                   	返回所有公共成员方法对象的数组，包括继承的
        // method1();

//        Method[] getDeclaredMethods()           	返回所有成员方法对象的数组，不包括继承的
        // method2();

//        Method getMethod(String name, Class<?>... parameterTypes)	返回单个公共成员方法对象
        // 获取无参无返回成员方法
        // method3();
        // 过去带参带返回值成员方法
        // method4();

//        Method getDeclaredMethod(String name, Class<?>... parameterTypes)	返回单个成员方法对象
        // method5();

    }

    private static void method5() throws ClassNotFoundException, NoSuchMethodException {
        // 1.获取class对象
        Class className = Class.forName("com.itheima.day16.reflect.test6.Student");

        // 2.获取私有的，无参无返回值，show方法的Method对象
        Method method = className.getDeclaredMethod("show");

        // 3.打印
        System.out.println(method);
    }

    private static void method4() throws ClassNotFoundException, NoSuchMethodException {
        // 1.获取class对象
        Class className = Class.forName("com.itheima.day16.reflect.test6.Student");

        // 2.获取function4方法的Method对象
        Method method = className.getMethod("function4", String.class);

        // 3.打印
        System.out.println(method);
    }

    private static void method3() throws ClassNotFoundException, NoSuchMethodException {
        // 1.获取class对象
        Class className = Class.forName("com.itheima.day16.reflect.test6.Student");

        // 2.获取function1方法的Method对象
        Method method = className.getMethod("function1");

        // 3.打印
        System.out.println(method);
    }

    private static void method2() throws ClassNotFoundException {
        // 1.获取class对象
        Class className = Class.forName("com.itheima.day16.reflect.test6.Student");

        // 2.获取所有成员方法对象的数组
        Method[] declaredMethods = className.getDeclaredMethods();

        // 3.遍历
        for (Method declaredMethod : declaredMethods) {
            System.out.println(declaredMethod);
        }
    }

    private static void method1() throws ClassNotFoundException {
        // 1.获取class对象
        Class className = Class.forName("com.itheima.day16.reflect.test6.Student");

        // 2.获取所有公共成员方法对象的数组
        Method[] methods = className.getMethods();

        // 3.遍历
        for (Method method : methods) {
            System.out.println(method);
        }
    }
}
